package com.mbc.mapper;


import com.mbc.pojo.MbcUser;
import com.mbc.vo.MbcUserInfoVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;

@Mapper
public interface UserMapper {

    /**
     * 根据openid获取用户信息
     *
     * @param openid 微信 openid
     * @return {@link MbcUser}
     */
    @Select("select * from mbc_user where openid = #{openid}")
    MbcUser getByOpenid(String openid);

    /**
     * 插入用户信息
     * @param user
     */
    void insert(MbcUser user);

    /**
     * 获取用户最大ID
     * @return
     */
    @Select("select max(user_id) from mbc_user")
    Integer getByUserId();

    /**
     * 获取粉丝数量
     *
     * @param userId 用户 ID
     * @return int
     */
    @Select("select count(user_id) from mbc_fans")
    int getFansCount(String userId);

    /**
     * 获取关注数量
     *
     * @param userId 用户 ID
     * @return int
     */
    @Select("select count(user_id) from mbc_concern")
    int getConcernCount(String userId);

    /**
     * 更新or修改昵称
     *
     * @param userId   用户 ID
     * @param nickname 昵称
     * @return int
     */
    @Update("update mbc_user set nickname = #{nickname} where user_id = #{userId}")
    int updateNicknames(String userId, String nickname);

    /**
     * 更新并添加手机号码
     *
     * @param userId      用户 ID
     * @param phoneNumber 电话号码
     * @return int
     */
    @Update("update mbc_user_info set phone_number = #{phoneNumber}, last_modified_at = #{now} where user_id = #{userId}")
    int updateandaddPhone(String userId, String phoneNumber,LocalDateTime now);

    /**
     * 更新或添加真实姓名
     *
     * @param userId    用户 ID
     * @param lastName  姓
     * @param firstName 名字
     * @return int
     */
    @Update("update mbc_user_info set Last_name = #{lastName} , first_name = #{firstName} , last_modified_at = #{now} where user_id = #{userId}")
    int updateOrAddRealName(String userId,String lastName,String firstName,LocalDateTime now);

    /**
     * 更新或添加详细地址
     *
     * @param userId  用户 ID
     * @param address 地址
     * @return int
     */
    @Update("update mbc_user_info set address = #{address} , last_modified_at = #{now} where user_id = #{userId}")
    int updateOrAddFullAddress(String userId, String address,LocalDateTime now);

    /**
     * 更新或添加头像
     *
     * @param userId         用户 ID
     * @param profilePicture 个人资料图片
     * @return int
     */
    @Update("update mbc_user_info set profile_picture = #{profilePicture}, last_modified_at = #{now} where user_id = #{userId}")
    int updateOrAddHeadShot(String userId, String profilePicture,LocalDateTime now);

    /**
     * 更新电子邮件
     *
     * @param userId 用户 ID
     * @param email  电子邮件
     * @return int
     */
    @Update("update mbc_user_info set email = #{email}, last_modified_at = #{now} where user_id = #{userId}")
    int updateEmail(String userId, String email,LocalDateTime now);

    /**
     * 插入用户详细信息
     *
     * @param userId         用户 ID
     * @param address        地址
     * @param lastName       姓
     * @param firstName      名字
     * @param email          电子邮件
     * @param phoneNumber    电话号码
     * @param dateOfBirth    出生日期
     * @param address1       地址1
     * @param gender         性别
     * @param profilePicture 头像
     * @param now            修改和添加时间
     * @return int
     */
    @Insert("insert into mbc_user_info(user_id, first_name, last_name, email, phone_number, " +
            "date_of_birth, address, gender, profile_picture, create_at, last_modified_at,personal_tags,personal_profile) " +
            "values (#{userId},#{firstName},#{lastName},#{email},#{phoneNumber}" +
            ",#{dateOfBirth},#{address1},#{gender},#{profilePicture},#{now},#{now},#{personalTags},#{personalProfile})")
    int insertUserInfo(String userId, String address, String lastName, String firstName, String email,
                       String phoneNumber, LocalDateTime dateOfBirth,String address1 ,String gender, String profilePicture, String personalTags, String personalProfile, LocalDateTime now);

    /**
     * 更新出生日期
     *
     * @param userId      用户 ID
     * @param dateOfBirth 出生日期
     * @return int
     */
    @Update("update mbc_user_info set date_of_birth = #{dateOfBirth},last_modified_at = #{dateOfBirth} where user_id = #{userId}")
    int updateDateOfBirth(String userId, String dateOfBirth);

    /**
     * 更新个人标签
     *
     * @param userId       用户 ID
     * @param personalTags 个人标签
     * @param now          现在
     * @return int
     */
    @Update("update mbc_user_info set personal_tags = #{personalTags}, last_modified_at = #{now} where user_id = #{userId}")
    int updatePersonalTags(String userId, String personalTags, LocalDateTime now);

    /**
     * 更新或添加个人简介
     *
     * @param userId          用户 ID
     * @param personalProfile 个人简介
     * @param now             现在
     * @return int
     */
    @Update("update mbc_user_info set personal_profile = #{personalProfile}, last_modified_at = #{now} where user_id = #{userId}")
    int updatePersonalProfile(String userId, String personalProfile, LocalDateTime now);

    /**
     * 查询用户详细信息
     *
     * @param userId 用户 ID
     * @return {@link MbcUserInfoVO}
     */
    @Select("select * from mbc_user_info where user_id = #{userId}")
    MbcUserInfoVO getByUserInfo(String userId);

}
